#ifndef EXCEPCIONES_H_
#define EXCEPCIONES_H_

#include <exception>

class ClaveDuplicadaException : public exception //del usuario
{
	virtual const char* what() const throw()
  	{
    	return "La clave esta duplicada";
  	}
};

class DesbordeDeBloqueException: public exception
{
    virtual const char* what() const throw ()
    {
        return "Se superó el tamaño total del bloque.";
    }
};

class SerializacionInvalidaException : public exception
{
	virtual const char* what() const throw()
  	{
    	return "La serializacion pasada no puede almacenarse.";
  	}
};

class PosicionInvalidaException : public exception
{
	virtual const char* what() const throw()
  	{
    	return "Se accedió a una posición del archivo fuera de rango.";
  	}
};

class UnidadEliminadaException : public exception
{
    virtual const char* what() const throw()
    {
        return "Se accedió a una posición del archivo cuyo contenido fue eliminado.";
    }
};


class DesbordeDeDatoException: public exception //del usuario
{
    virtual const char* what() const throw ()
    {
        return "La serialización del dato pasado excede el tamaño de bloque especificado";
    }
};

class ArbolInutilizableException: public exception
{
    virtual const char* what() const throw ()
    {
        return "No se puede garantizar el balanceo del arbol.";
    }
};

class ArchivoInexistenteException: public exception //del usuario
{
    virtual const char* what() const throw ()
    {
        return "La ruta y nombre especificados no corresponden a un archivo existente.";
    }
};

class NoSePuedeCrearArchivoException: public exception //del usuario
{
	virtual const char* what() const throw ()
    {
        return "No se pudo crear el archivo.";
    }
};

class MetodoNoDebeSerUsadoException: public exception
{
    virtual const char* what() const throw ()
    {
        return "Este metodo no debe ser usado";
    }
};

class NoSePuedeCalcularRangoException: public exception
{
    virtual const char* what() const throw ()
    {
        return "No se puede calcular el rango.";
    }
};

class NoSeDeberiaIntentarBalancearException: public exception
{
    virtual const char* what() const throw ()
    {
        return "No se deberia llamar al metodo balancear.";
    }
};

class BufferOverflowException: public exception
{
    virtual const char* what() const throw ()
    {
        return "La capacidad del buffer fue excedida";
    }
};

class NoSeUsaBSharp: public exception
{
    virtual const char* what() const throw ()
    {
        return "No se debe llamar a este metodo si es que no se tiene un B#";
    }
};

class RecursoOcupadoException: public exception
{
    virtual const char* what() const throw ()
    {
        return "El recurso no está disponible para su utilización.";
    }
};

#endif /*EXCEPCIONES_H_*/
